package com.example.chenhaosblog.utils;

import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

import java.util.List;

public class Utils {

    public static final String md5(String password, String salt){
        //加密方式
        String hashAlgorithmName = "MD5";
        //盐：为了即使相同的密码不同的盐加密后的结果也不同
        ByteSource byteSalt = ByteSource.Util.bytes(salt);
        //密码
        Object source = password;
        //加密次数
        int hashIterations = 1024;
        SimpleHash result = new SimpleHash(hashAlgorithmName, source, byteSalt, hashIterations);
        return result.toString();
    }

    public static String Md5Psd(PageData pd) {


        //原始密码
        String source=pd.getString("password");
        //盐
        String salt=pd.getString("salt");
        //散列次数
        int hashInterrations=2;
        /*	方法1：
         * 第一个参数：明文，原始密码
         * 第二个参数：盐，通常使用随机数，这里指定固定字符串
         * 第三个参数：散列的次数，比如散列两次，相当 于md5(md5(''))
         */
        Md5Hash md5Hash=new Md5Hash(source, salt, hashInterrations);
        System.out.println(md5Hash);
        //方法2：第一个参数：散列算法
        SimpleHash sim=new SimpleHash("md5", source, salt,hashInterrations);
        System.out.println(sim);
        return sim.toString();
    }
    /**
     * 	将传入的新值替换集合中的老值
     * @param list	需要操作的数组
     * @param oldObject	需要替换的老值
     * @param newObject	替换后的新值
     */
    public static <E> void replaceAll(List<E> list, E oldObject, E newObject) {
        for (int i = 0; i < list.size(); i++) {        //遍历
            if (oldObject.equals(list.get(i))) {        //如果list中存在与oldObject相同的值，则用newObject替换
                list.set(i, newObject);                //设置索引为i的值为newObject
            }
        }
    }

}
